home *** CD-ROM | disk | FTP | other *** search
- * Program.: TRIG.PRG
- * Author..: Alastair Dallas
- * Date....: 07/03/84
- * Notice..: Copyright 1984, Ashton-Tate, All Rights Reserved
- * Version.: dBASE III, version 1.0
- * Notes...: Transcendental functions for dBASE III.
- *
- * Assumes: SET DECIMALS TO 12
- * SET FIXED ON
- *
- PROCEDURE PI { The value of PI to 15 places. }
- PARAMETER value
- value = 3.14159265358979
- RETURN
- *
- *
- PROCEDURE Makdeg { Convert radians to degrees. }
- PARAMETER value
- value = value * (180/3.14159265358979)
- RETURN
- *
- *
- PROCEDURE Makrad { Convert degrees to radians. }
- PARAMETER value
- value = value * (3.14159265358979/180)
- RETURN
- *
- *
- PROCEDURE Sine { Sine function }
- PARAMETER argument
- * --- IN: argument in radians
- * ---OUT: argument = SINE( argument )
- DO Tan_half WITH argument
- argument = (argument + argument) / (argument * argument + 1.0)
- RETURN
- *
- *
- PROCEDURE Cosine { Cosine function }
- PARAMETER argument
- * --- IN: argument in radians
- * ---OUT: argument = COS( argument )
- DO Tan_half WITH argument
- argument = argument * argument
- argument = (1.0 - argument) / (1.0 + argument)
- RETURN
- *
- *
- PROCEDURE Tangent { Tangent function }
- PARAMETER argument
- * --- IN: argument in radians
- * ---OUT: argument = TAN( argument )
- DO Tan_half WITH argument
- argument = (argument + argument) / (1.0 - argument * argument)
- RETURN
- *
- *
- PROCEDURE Arcsin { Arcsin function }
- PARAMETER argument
- * IN: argument = ratio of sides
- * OUT: argument = ARCSIN( argument )
- value0 = argument
- value1 = 1
- DO CASE
- CASE value0 < 0.0
- value0 = -(value0)
- value1 = -1
- CASE value0 = 0
- value1 = 0
- ENDCASE
- DO CASE
- CASE value0 > 1.0
- ? "ILLEGAL ARCSIN ARGUMENT"
- CANCEL
- CASE value0 = 1.0
- argument = value1 * 0.5 * 3.14159265358979
- OTHERWISE
- argument = argument / SQRT( 1.0 - argument * argument )
- DO Arctan WITH argument
- ENDCASE
- RETURN
- *
- *
- PROCEDURE Arccos { Arccos function }
- PARAMETER argument
- * IN: argument = ratio of sides
- * OUT: argument = ARCCOS( argument )
- DO Arcsin WITH argument
- argument = 0.5 * 3.14159265358979 - argument
- RETURN
- *
- *
- PROCEDURE Arctan { Arctangent function }
- PARAMETER argument
- * --- IN: argument = ratio of sides
- * ---OUT: argument = angle in degrees
- value0 = argument
- IF value0 < 0.0
- value0 = -(value0)
- ENDIF
- DO CASE
- CASE value0 > 2.4142135623731
- value3 = 2
- value0 = -1.0 / value0
- CASE value0 > .41421356237310
- value3 = 1
- value0 = 1.0 - ( 2.0 / ( 1.0 + value0 ) )
- OTHERWISE
- value3 = 0
- ENDCASE
- value1 = 216.06230789724
- value2 = value0 * value0
- value4 = ( ( ( 12.888383034157 * value2 + 132.70239816398 ) *;
- value2 + 322.66207001325 ) * value2 + value1 ) * value0
- value5 = ( ( ( value2 + 38.501486508351 ) * value2 +;
- 221.05088302842 ) * value2 + 394.68283931228 ) *;
- value2 + value1
- value0 = value4 / value5
- DO CASE
- CASE value3 = 1
- value0 = value0 + .78539816339745
- CASE value3 = 2
- value0 = value0 + 1.5707963267949
- ENDCASE
- IF argument < 0.0
- value0 = -(value0)
- ENDIF
- argument = value0
- RETURN
- *
- *
- PROCEDURE Tan_half { Routine common to trig functions }
- PARAMETER argument
- * --- IN: argument in radians
- * ---OUT: argument = scaled argument
- value0 = argument
- IF argument < 0.0
- argument = -(argument)
- ENDIF
- argument = argument / 6.2831853071795
- argument = ( argument - INT( argument ) ) * 8.0
- value2 = 0
- DO WHILE argument >= 1.0
- argument = 0.5 * argument
- value2 = value2 + 1
- ENDDO
- value1 = argument * argument
- value3 = ( value1 * .026247864594320 ) - 17.805646714386
- value4 = ( ( value3 * value1 ) + 1038.5171455198 ) * argument
- value5 = ( ( value1 - 181.2832834854 ) * value1 ) + 2644.5621951222
- argument = value4 / value5
- DO WHILE value2 > 0
- argument = (argument + argument) / (1.0 - (argument * argument))
- value2 = value2 - 1
- ENDDO
- IF value0 < 0.0
- argument = -(argument)
- ENDIF
- RETURN
- *
- * EOF: TRIG.PRG